﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio.Generico;
using Negocio.View;
using System.Data;
using Integra.Comun;

namespace PresentacionWeb
{
    public partial class ListadoRenglones : System.Web.UI.Page
    {

        #region Propiedades
        private int coAsignatura;

        private RenglonDTO renglonActivo = null;
        private List<DocumentacionReqDTO> listaDocumentacionActiva = null;
        private PersonaDTO tokenUsuario = null;
        #endregion

        #region inicializacion
        protected void Page_Load(object sender, EventArgs e)
        {
       
                //tomo el id del empleado que vino en la url
                if (Session["CodigoAsignatura"] == null)
                    this.coAsignatura = -1; //si se seelcciono la opcion de nuevo
                else
                    this.coAsignatura = Convert.ToInt32(Session["CodigoAsignatura"]);

                if (Session["tokenUsuario"] != null) 
                {
                    this.tokenUsuario = (PersonaDTO)Session["tokenUsuario"];
                }

                //Carga de combos
                //Cargamos los combos
                DataTable dt = ControlDatos.GetTableFromEnum(typeof(TipoRenglon));
                ddlTiposRenglon.DataValueField = "Codigo";
                ddlTiposRenglon.DataTextField = "Texto";
                ddlTiposRenglon.DataSource = dt;
                ddlTiposRenglon.DataBind();


                //Cargo la lista de estudio
                CargarRenglonesCombo();

                RecargaInformacion();

            
        }

        #endregion

        #region Metodos Privados


        /// <summary>
        /// Método que recarga sin filtro
        /// </summary>
        private void CargarRenglonesCombo()
        {

            RenglonDTO filtro = new RenglonDTO();
            filtro.CoAsignatura = coAsignatura;
            RenglonView vista = RenglonView.GetInstance();
            DataTable dt = vista.GetViewRenglon(filtro).Table;
            this.ddlListadoRenglones.SelectedIndexChanged -= new System.EventHandler(this.ddlListadoRenglones_SelectedIndexChanged);
            ddlListadoRenglones.DataValueField = "CODIGORENGLON";
            ddlListadoRenglones.DataTextField = "NOMBRE";
            ddlListadoRenglones.DataSource = dt;
            ddlListadoRenglones.DataBind();
            this.ddlListadoRenglones.SelectedIndexChanged += new System.EventHandler(this.ddlListadoRenglones_SelectedIndexChanged);

        }

        /// <summary>
        /// Método que recarga el grid por completo 
        /// </summary>
        private void RecargaDatosRenglon(RenglonDTO filtro)
        {
            try
            {
                RenglonView vista = RenglonView.GetInstance();

                DataTable dt = vista.GetViewRenglon(filtro).Table;
                int numeroElementos = dt.Rows.Count;
                int i = 0;
                foreach (DataRow dr in dt.Rows)
                {
                    if (dr["PUBLICO"] != null && (bool)dr["PUBLICO"] == true)
                    {
                        i++;
                        renglonActivo = new RenglonDTO();
                        renglonActivo.CoRenglon = Int32.Parse(dr["CODIGORENGLON"].ToString());
                        renglonActivo.Nombre = dr["NOMBRE"].ToString();
                        renglonActivo.Publico = Convert.ToBoolean(dr["PUBLICO"].ToString());
                        renglonActivo.CoTipoRenglon = Int32.Parse(dr["CODIGOTIPORENGLON"].ToString());
                        renglonActivo.FchCreacion = DateTime.Parse(dr["FECHACREACION"].ToString());
                        renglonActivo.FchRequerimiento = DateTime.Parse(dr["FECHAREQUERIMIENTO"].ToString());
                        renglonActivo.CoAsignatura = Int32.Parse(dr["CODIGOASIGNATURA"].ToString());
                        renglonActivo.Descripcion = dr["DESCRIPCION"].ToString();
                        Session["renglonActivo"] = (RenglonDTO)renglonActivo;
                    }
                }
                this.txtNombre.Text = renglonActivo.Nombre;
                this.ddlTiposRenglon.SelectedValue = renglonActivo.CoTipoRenglon.ToString();
                this.fchRequerimiento.Text = DateTime.Parse(renglonActivo.FchRequerimiento.ToString()).ToShortDateString();
                this.fchCreacion.Text = DateTime.Parse(renglonActivo.FchCreacion.ToString()).ToShortDateString();
                this.txtDescripcion.Text = renglonActivo.Descripcion;

            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }

        /// <summary>
        /// Funcion que recarga los documetnos asociados al renglon.
        /// </summary>
        private void RecargaDatosDocumentos()
        {
            try
            {
                DocumentacionReqView vista = DocumentacionReqView.GetInstance();
                DocumentacionReqDTO filtro = new DocumentacionReqDTO();
                filtro.CoRenglon = renglonActivo.CoRenglon;

                //this.pnlRenglones.Controls.Clear();
                DataTable dt = vista.GetDocumentacionReqView(filtro).Table;
                int numeroElementos = dt.Rows.Count;
                int i = 0;
                listaDocumentacionActiva = new List<DocumentacionReqDTO>();
                foreach (DataRow dr in dt.Rows)
                {
                    DocumentacionReqDTO obj = new DocumentacionReqDTO();

                    obj.CoDocumentacionReq = !dr.IsNull("CODIGODOCUMENTACIONREQ") ? Int32.Parse(dr["CODIGODOCUMENTACIONREQ"].ToString()) : Int32.MinValue;
                    obj.Contenido = !dr.IsNull("CONTENIDO") ? String2Image(dr["CONTENIDO"].ToString()) : null;
                    obj.CoRenglon = !dr.IsNull("CODIGORENGLON") ? Int32.Parse(dr["CODIGORENGLON"].ToString()) : Int32.MinValue;
                    obj.Descripcion = !dr.IsNull("PATH") ? dr["PATH"].ToString() : string.Empty;
                    obj.NombreDoc = !dr.IsNull("NOMBREDOC") ? dr["NOMBREDOC"].ToString() : string.Empty;
                    obj.Path = !dr.IsNull("PATH") ? dr["PATH"].ToString() : string.Empty;

                    listaDocumentacionActiva.Add(obj);
                }

                //Cargamos el grid de datos
                this.grdDocumentacionReq.DataSource = null;
                this.grdDocumentacionReq.DataSource = listaDocumentacionActiva;
                this.grdDocumentacionReq.DataBind();


            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }

        private void RecargaInformacion()
        {
            //Cada vez que seleccione un renglon debera de cargarse
            //Datos propios del renglon
            RenglonDTO filtroRenglon = new RenglonDTO();
            filtroRenglon.CoRenglon = Int32.Parse(ddlListadoRenglones.SelectedValue.ToString());
            RecargaDatosRenglon(filtroRenglon);

            //Datos del renglon documentacion
            RecargaDatosDocumentos();
        }

        protected void ddlListadoRenglones_SelectedIndexChanged(object sender, EventArgs e)
        {
            RecargaInformacion();
        }




        /// <summary>
        /// Funcion que apartir de una cadena obtiene una Imagen compatible con el formato de la BD
        /// </summary>
        /// <param name="cadena">Contenedor de los parametros del WCF</param>
        /// <returns>Imagen para la BD</returns>
        protected byte[] String2Image(String cadena)
        {
            System.Text.ASCIIEncoding codificador = new System.Text.ASCIIEncoding();
            byte[] bytes = codificador.GetBytes(cadena);


            return bytes;
        }


        protected void btnAñadirPracticas_Click(object sender, EventArgs e)
        {
            //Session["tokenUsuario"] = this.tokenUsuario;
            //Session["renglonActivo"] = this.renglonActivo;
            Session["coAsignatura"]=this.coAsignatura;
            Response.Redirect("AñadirPracticas.aspx");
        }
        #endregion


    }
}